Chod hore
Predchádzajúca stránka Nasledujúca stránka Začiatok kapitoly Koniec kapitoly Začiatok kurzu Koniec kurzu


10. ITERÁCIE


Najpodstatnejšou vlastnosťou programu je, že dokáže vykonávať opakovane činnosti. Iterácia znamená opakovanie. V takomto prípade sa jeden alebo viacero príkazov vykonáva viackrát. Vo všeobecnosti výpočet, ktorý je treba urobiť iba raz - sa neoplatí počítať na počítači. Použiť počítač má význam hlavne tam, kde sa dané výpočty musia vykonávať pre rôzne údaje opakovane. Sú prípady, keď vopred vieme, že koľkokrát sa má výpočet opakovať a sú prípady, keď počet opakovaní závisí od splnenia istých podmienok. Napr. užívateľ zadáva z klávesnice údaje a program má ukončiť svoju prácu až vtedy, keď užívateľ chce ukončiť výpočet. V takomto prípade my nevieme koľko tých údajov bude, ale program musí spracovať údaje toľkokrát, koľkokrát to bude požadovať užívateľ - až kým nezadá znak ukončenia výpočtu.

Pascal ponúka tri typy iterácií (cyklov). Sú to WHILE, REPEAT a FOR. Každá úloha sa vo všeobecnosti dá riešiť viacerými spôsobmi - toto je práve to, čo robí programovanie - na jednej strane veľmi zaujímavým a na druhej strane veľmi ťažkým. Toto platí nie len pre cykly. Vždy sa dá pre danú úlohu vybrať najvhodnejšia z týchto iterácií. Pri rozhodovaní vždy zoberme do úvahy nasledujúce:

  • Či vieme koľkokrát sa bude jadro cyklu opakovať?
  • Či je prípustný prázdny cyklus (prípad, keď cyklus sa nevykoná ani raz)?
  • Čo je vhodnejšie - overovať podmienku pri vstupe alebo pri výstupe z cyklu?



10.1 Vpredu testovaný cyklus - WHILE


V tomto prípade sa podmienka preveruje ešte pred vstupom do cyklu. Ak podmienka nie je splnená, potom príkazy tela cyklu sa nevykonajú ani raz. Ak vstupná podmienka cyklu je splnená, potom príkazy tela cyklu sa vykonajú. V tele cyklu by sa mali meniť hodnoty vstupujúce do vstupnej podmienky - v opačnom prípade vyrobíme nekonečný cyklus - a náš program sa nikdy neukončí. Po vykonaní príkazov tela cyklu sa podmienka vstupu znovu overuje - už so zmenenými parametrami a celý proces sa opakuje. Keď už vstupná podmienka cyklu nebude splnená, pokračovať budeme príkazom nasledujúcim za cyklom.

Obr10_1

Slová WHILE … DO znamená KÝM … VYKONÁVAJ. Teda kým je podmienka vstupu cyklu F1 splnená bude sa vykonávať príkaz tela cyklu U1 (U1 môže byť, a do konca vo väčšine prípadov aj je zloženým príkazom).

Úloha
Máme dajaké ušetrené peniaze. Sme zvedavý, že za koľko mesiacov by sme mohli mať v banke 100 000 Sk, ak mesačný úrok v banke je 2% ?

Danú úlohu vyriešime nasledovne: získanú sumu za každý mesiac vynásobíme úrokom do tej doby, kým táto suma neprevýši 100 000. Teoreticky je možný aj prázdny cyklus, lebo užívateľ by mohol zadať už na začiatku vyššiu sumu než 100 000.

Jacksonov diagram:

Obr10_2

Obr10_3



10.2 Vzadu testovaný cyklus - REPEAT


V tomto prípade príkazy tela cyklu raz sa určite vykonajú. Na konci cyklu sa rozhodne o tom, či môžeme cyklus opustiť. Ak nie, príkazy tela cyklu opakujeme a podobne ako v predchádzajúcom prípade, aj teraz príkazy tela cyklu by mali modifikovať parametre vstupujúce do podmienky. V opačnom prípade by sme tiež mohli vyrobiť nekonečný cyklus. Pôvodný Jacksonov diagram nerozlišuje tieto dva typy cyklov. Pre rozlíšenie v Jacksonov diagrame tento cyklus označíme tak, že hviezdičku (označujúcu podmienku cyklu) nakreslíme v dolnom pravom rohu.

Obr10_4

Úloha
Pýtajme z terminálu číslo. Prijať môžeme iba kladné celé čísla neprevyšujúce 31.

Obr10_5

Načítanie aspoň raz musíme urobiť. V ideálnom prípade užívateľ hneď na prvýkrát zadal vhodné číslo a cyklus sa vykoná iba raz.

Obr10_6